/**
 * Doubao 多模态视觉API 测试工具
 * 用于测试与Doubao多模态大模型的视觉能力
 */
const axios = require('axios');
const fs = require('fs');
const path = require('path');
const dotenv = require('dotenv');

// 加载环境变量
dotenv.config();

// 获取命令行参数
const args = process.argv.slice(2);
const imagePath = args[0] || path.join(__dirname, 'test-image.jpg');
const plantName = args[1] || '未知植物';

console.log(`测试Doubao多模态视觉API连接...`);
console.log(`使用图片: ${imagePath}`);
console.log(`植物名称: ${plantName}`);

// 检查API密钥
const apiKey = process.env.ARK_API_KEY;
if (!apiKey) {
  console.error('错误: 未设置ARK_API_KEY环境变量');
  console.error('请在.env文件中添加正确的API密钥');
  process.exit(1);
}

async function testDoubaoVisionAPI() {
  try {
    // 读取测试图片
    if (!fs.existsSync(imagePath)) {
      console.error(`错误: 图片文件不存在: ${imagePath}`);
      process.exit(1);
    }
    
    const imageBuffer = fs.readFileSync(imagePath);
    const base64Image = imageBuffer.toString('base64');
    
    console.log(`图片读取成功, 大小: ${imageBuffer.length} 字节`);
    console.log(`Base64编码长度: ${base64Image.length}`);
    
    // 构造请求 - 严格按照官方文档格式
    const apiUrl = 'https://ark.cn-beijing.volces.com/api/v3/chat/completions';
    const requestData = {
      model: "doubao-1.5-vision-pro-32k-250115",
      messages: [
        {
          role: "user",
          content: [
            {
              type: "text",
              text: `这是一张${plantName}的照片。请作为一名农业专家，详细分析这个植物是否健康，是否有病害或生长问题？如果有问题，请说明原因和解决方法。`
            },
            {
              type: "image_url",
              image_url: {
                url: `data:image/jpeg;base64,${base64Image}`,
                detail: "low"  // 使用高细节模式
              }
            }
          ]
        }
      ],
      temperature: 0.7,
      max_tokens: 2000
    };
    
    console.log('正在发送请求至Doubao视觉API...');
    console.log(`API Key前4位: ${apiKey.substring(0, 4)}...`);
    console.time('API调用耗时');
    
    const response = await axios.post(apiUrl, requestData, {
      headers: {
        'Authorization': `Bearer ${apiKey}`,
        'Content-Type': 'application/json'
      },
      timeout: 60000
    });
    
    console.timeEnd('API调用耗时');
    
    if (response.status === 200) {
      console.log('\n✅ API请求成功!');
      console.log('状态码:', response.status);
      
      if (response.data.choices && response.data.choices.length > 0) {
        const content = response.data.choices[0].message.content;
        console.log('\n--- 回复内容 ---\n');
        console.log(content);
        console.log('\n-----------------\n');
        
        // 显示使用情况
        if (response.data.usage) {
          console.log('Token 使用情况:');
          console.log(`- 输入tokens: ${response.data.usage.prompt_tokens}`);
          console.log(`- 输出tokens: ${response.data.usage.completion_tokens}`);
          console.log(`- 总tokens: ${response.data.usage.total_tokens}`);
        }
        
        // 保存成功响应到文件
        fs.writeFileSync('./doubao-vision-success.json', JSON.stringify(response.data, null, 2));
        console.log('完整响应已保存到 doubao-vision-success.json');
      } else {
        console.error('⚠️ API返回数据格式异常:', JSON.stringify(response.data));
      }
    } else {
      console.error('⚠️ API请求失败，状态码:', response.status);
    }
  } catch (error) {
    console.error('❌ 测试失败:', error.message);
    
    if (error.response) {
      console.error('状态码:', error.response.status);
      console.error('返回数据:', JSON.stringify(error.response.data, null, 2));
      
      // 保存错误响应
      fs.writeFileSync('./doubao-vision-error.json', JSON.stringify({
        error: error.message,
        status: error.response.status,
        data: error.response.data
      }, null, 2));
    } else {
      console.error('详细错误:', error);
      fs.writeFileSync('./doubao-vision-error.json', JSON.stringify({
        error: error.message,
        stack: error.stack
      }, null, 2));
    }
  }
}

// 执行测试
testDoubaoVisionAPI();
